import { createRouter, createWebHistory } from "vue-router";
import NProgress from "nprogress";
import "nprogress/nprogress.css";

import { useRoutesStore } from "@/stores/routes.js";

import { useUserStore } from "@/stores/user.js";
import staticRoutes from "./staticRoutes.js";
import { menuApi } from "@/api/user.js"; // 假设你有一个接口获取后端返回的路由信息

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL), //提供一个环境变量，，用来区分开发环境和生产环境
  routes: staticRoutes,
  // routes: [
  //   {
  //     path: "/login",
  //     component: () => import("@/views/login/loginPage.vue"),
  //   },
  //   // {
  //   //   path: "/",
  //   //   component: () => import("@/views/layout/layoutContainer.vue"),
  //   //   redirect: "/article/channel",
  //   //   children: [
  //   //     {
  //   //       path: "/article/channel",
  //   //       component: () => import("@/views/article/articleChannel.vue"),
  //   //     },
  //   //     {
  //   //       path: "/article/manage",
  //   //       component: () => import("@/views/manager/articleManager.vue"),
  //   //     },
  //   //     {
  //   //       path: "/personalCenter/basicInformation",
  //   //       component: () =>
  //   //         import("@/views/personalCenter/basicInformation.vue"),
  //   //     },
  //   //     {
  //   //       path: "/personalCenter/resetAvator",
  //   //       component: () => import("@/views/personalCenter/resetAvator.vue"),
  //   //     },
  //   //     {
  //   //       path: "/personalCenter/ToDoList",
  //   //       component: () => import("@/views/personalCenter/ToDoList.vue"),
  //   //     },
  //   //     {
  //   //       path: "/personalCenter/resetPassword",
  //   //       component: () => import("@/views/personalCenter/resetPassword.vue"),
  //   //     },
  //   //   ],
  //   // },
  //   { path: "/404", name: "404", component: () => import("@/views/404.vue") },
  //   {
  //     path: "/:pathMatch(.*)",
  //     redirect: "/404",
  //   },
  // ],
  // 滚动行为:控制滚动条的位置
  scrollBehavior() {
    return {
      left: 0,
      top: 0,
    };
  },
});
function transformRoutes(backendRoutes) {
  console.log(backendRoutes, "11");

  return backendRoutes.map((route) => {
    if (!route.component) {
      // route.component = () => import("@/views/EmptyComponent.vue"); // 默认组件
      // 或者重定向到子路由
      // route.redirect = route.children[0].path;
    }
    const transformedRoute = {
      path: route.path,
      title: route.title,

      // component: route.component, // 动态加载组件
      component: () => import(`@/views/${route.component}.vue`), // 动态加载组件
      meta: {
        title: route.title,
        icon: route.icon,
      },
    };

    // 如果有子路由，递归处理
    if (route.children && route.children.length > 0) {
      transformedRoute.children = transformRoutes(route.children);
    }

    return transformedRoute;
  });
}
export function addDynamicRoutes(backendRoutes) {
  // 转换路由格式
  const transformedRoutes = transformRoutes(backendRoutes);

  // 将转换后的路由添加到路由表中
  transformedRoutes.forEach((route) => {
    router.addRoute(route);
  });

  // 添加 404 页面路由（确保 404 页面在最后）
  router.addRoute({ path: "/:pathMatch(.*)*", redirect: "/404" });
}
// import { asyncRoutes } from "./asyncRoutes.js";
// export async function addDynamicRoutes(userRole) {
//   try {
//     // 获取后端返回的路由信息
//     const backendRoutes = await menuApi();
//     console.log(backendRoutes.data, "后端返回的路由信息");
//     const userStore = useUserStore();

//     // function filterRoute(route, permisRoute) {
//     //   return route.filter((item) => {
//     //     // 查找后端返回的路由权限信息中是否存在与当前路由匹配的项
//     //     const permisItem = permisRoute.find(
//     //       (permis) => permis.title === item.title
//     //     );
//     //     if (permisItem) {
//     //       // 如果存在匹配项，且当前路由有子路由，则递归过滤子路由
//     //       if (
//     //         item.children &&
//     //         item.children.length > 0 &&
//     //         permisItem.children &&
//     //         permisItem.children.length > 0
//     //       ) {
//     //         item.children = filterRoute(item.children, permisItem.children);
//     //       }
//     //       // 返回过滤后的子路由（如果存在）
//     //       return item.children && item.children.length > 0 ? item : true;
//     //     }
//     //     // 如果不存在匹配项，则不包含该路由
//     //     return false;
//     //   });
//     // }
//     // const filteredRoutes = filterRoute(asyncRoutes, backendRoutes.data);
//     // console.log(filteredRoutes, "比对后的路由表");

//     // // 将过滤后的动态路由添加到路由表中
//     // // filteredRoutes.forEach((route) => {
//     // //   console.log(route.path, "路由路径");

//     // //   router.addRoute({
//     // //     path: route.path,
//     // //     name: route.title,
//     // //     component: () => import(`@/views/${route.component}.vue`), // 动态加载组件
//     // //     // meta: route.meta,
//     // //   });
//     // // });
//     // // 处理嵌套路由
//     // const processedRoutes = processNestedRoutes(filteredRoutes);
//     // console.log(processedRoutes, "处理后的路由");

//     // 将处理后的动态路由添加到路由表中
//     // processedRoutes.forEach((route) => {
//     //   router.addRoute(route);
//     // });
//     // 添加 404 页面路由（确保 404 页面在最后）
//     router.addRoute({ path: "/:pathMatch(.*)*", redirect: "/404" });
//   } catch (error) {
//     console.error("Failed to load dynamic routes:", error);
//   }
// }

// 白名单
const whiteList = ["/login"];
// 全局前置导航守卫  鉴权
// 路由导航前，默认直接放行
//返回值
// 1.underfined  /true
// 2.false 拦回from地址
// 3.具体路径  拦截后，跳转到指定地址
//'/login',  {name: 'login'}
router.beforeEach((to, from) => {
  NProgress.start();
  // 是否有token
  const userStore = useUserStore();
  const routes = useRoutesStore();
  // console.log(routes, "routes");
  const token = userStore.token;
  // 登录过，去的地址是否是登录页
  // if (token) {
  //   if (to.path === '/login') {
  //     next('/')
  //   } else {
  //     // 不是登录页，是否有用户资料
  //     // const nav = store.getters.nav

  //     // if (nav) {
  //     //     // 有用户资料,放行
  //     //     next()
  //     // } else {
  //     //     // 没有就获取一下，再放行

  //     //     next()
  //     // }
  //     next()
  //   }
  // } else {

  //   // 没有登陆过
  //   if (whiteList.includes(to.path)) {
  //     next()
  //   } else {
  //     next('/login')
  //   }
  // }
  // console.log(token, "token");
  // console.log(to.path, "to.path");
  if (token && to.path == "/login") return from.path;
  if (!token && to.path !== "/login") return "/login";
  // 关闭进度条
  NProgress.done();
});
// // 后置守卫
router.afterEach((to, from) => {
  // 关闭进度条
  NProgress.done();
});
export default router;
